/*****************************
 *@file: CustomDragComponent
 *@author: 陈吕唐
 *@desc：自定义拖拽移动节点组件
 *@date: 2021-10-12	18:03
 *****************************/
import { Component, EventTouch, Node, _decorator, math } from 'cc';
const { ccclass, property, menu } = _decorator;


@ccclass('CustomDragComponent')
@menu('Libs/CustomDragComponent')
export class CustomDragComponent extends Component {
    /****************************************************************************************************************
     *Readonly 常量
     ****************************************************************************************************************/
    /****************************************************************************************************************
     *Property 定义变量
     ****************************************************************************************************************/
    /***************************************************************
     *PropertyUI 引用的控件
     ***************************************************************/
    /****************************************************************************************************************
     * Lifecycle 生命周期相关方法
     ****************************************************************************************************************/
    protected onEnable() {
        this.node.on(Node.EventType.TOUCH_START, this.dragStart, this)
        this.node.on(Node.EventType.TOUCH_MOVE, this.dragging, this)
        this.node.on(Node.EventType.TOUCH_CANCEL, this.dragEnd, this)
        this.node.on(Node.EventType.TOUCH_END, this.dragEnd, this)
    }


    protected onDisable() {
        this.node.off(Node.EventType.TOUCH_START, this.dragStart, this)
        this.node.off(Node.EventType.TOUCH_MOVE, this.dragging, this)
        this.node.off(Node.EventType.TOUCH_CANCEL, this.dragEnd, this)
        this.node.off(Node.EventType.TOUCH_END, this.dragEnd, this)
    }
    /****************************************************************************************************************
     * Public 公有方法
     ****************************************************************************************************************/
    /****************************************************************************************************************
     * private 私有方法
     ****************************************************************************************************************/
    /**
     * 拖拽开始
     */
    protected dragStart(event: EventTouch) {
        // this.node.emit(EventType.DragEvent.DRAG_START, event);
    }

    /**
     * 拖拽中
     */
    protected dragging(event: EventTouch) {

        let moveX = event.getDeltaX();
        let moveY = event.getDeltaY();

        let pos: math.Vec3 = this.node.position;
        pos.x += moveX;
        pos.y += moveY;

        this.node.setPosition(pos);
        // this.node.emit(EventType.DragEvent.DRAGGING, event);
    }

    protected dragEnd(event: EventTouch) {
        // this.node.emit(EventType.DragEvent.DRAG_END, event);
    }
    /****************************************************************************************************************
     * Property Get && Set 属性的 get && set 函数
     ****************************************************************************************************************/
}